import { Request, Response, NextFunction } from 'express';
// 引入JWT模块
import jsonwebtoken from 'jsonwebtoken'
// token加密所使用的秘钥
const tokenKey = 'qwer1234'
// 普通用户鉴权中间件
export function authorizeHandlerNormal(req: Request, res: Response, next: NextFunction): void {
  // 获取请求头中的token数据
  let token = req.headers.token as string
  // Token不存在，提示登录
  if (!token || token.length == 0) {
    res.status(401).json({
        error:'请先登录'
    })
  } else {
    // 进行token解析
    jsonwebtoken.verify(token, tokenKey, (err: any, decode: any)=>{
        if (err) {
            // 解析异常提醒重新登录
            res.status(401).json({
                error:'Token异常或过期，请重新登录'
            })
        } else {
            // 将解析的结果重新加入到请求头中，传送到下一个处理步骤
            req.headers.user = decode
            next()
        }
    })
  }
}
// 管理员用户鉴权中间件，用在只能管理员访问的接口中
export function authorizeHandleAdmin(req: Request, res: Response, next: NextFunction): void {
  // 获取请求头中的token数据
  let token = req.headers.token as string
  // Token不存在，提示登录
  if (!token || token.length == 0) {
    res.status(401).json({
        error:'请先登录'
    })
  } else {
    // 进行token解析
    jsonwebtoken.verify(token, tokenKey, (err: any, decode: any)=>{
        if (err) {
            // 解析异常提醒重新登录
            res.status(401).json({
                error:'Token异常或过期，请重新登录'
            })
        } else {
            // 判断用户权限，不是管理员则提示无账号权限
            if (decode.role != 'admin') {
                res.status(401).json({
                    error:'无管理员权限，请登录管理员账号'
                })
            } else {
                // 将解析的结果重新加入到请求头中，传送到下一个处理步骤
                req.headers.user = decode
                next()
            }
        }
    })
  }
}

